package com.cougil.uoc.seghismed.model.comunicacions;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import com.cougil.uoc.seghismed.model.Usuari;
import com.cougil.uoc.seghismed.model.comunicacions.enums.Operacio;
import com.cougil.uoc.seghismed.model.comunicacions.enums.Resultat;

/**
 * Entitat de negoci que representa pròpiament una Resposta de l'aplicació Gestora a una
 * aplicació Client
 *
 * @author Ignacio Cougil Jares
 *
 */
public class Resposta {

	private String descripcio;
	private Integer Ng;
	private Integer Ni;
	private Operacio operacio;
	private Resultat resultat;
	private Usuari usuariDesti;
	private Usuari usuariOrigen;

	public Resposta() {

	}

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(final Object other) {
		if (!(other instanceof Resposta)) {
			return false;
		}
		Resposta castOther = (Resposta) other;
		return new EqualsBuilder()
			.append(this.resultat, castOther.resultat)
			.append(this.descripcio, castOther.descripcio)
			.append(this.operacio, castOther.operacio)
			.append(this.usuariOrigen, castOther.usuariOrigen)
			.append(this.usuariDesti, castOther.usuariDesti)
			.append(this.Ni, castOther.Ni)
			.append(this.Ng, castOther.Ng)
			.isEquals();
	}
	/**
	 * @return Retorna el valor de la propietat descripcio
	 */
	public String getDescripcio() {
		return this.descripcio;
	}
	/**
	 * @return Retorna el valor de la propietat ng
	 */
	public Integer getNg() {
		return this.Ng;
	}
	/**
	 * @return Retorna el valor de la propietat ni
	 */
	public Integer getNi() {
		return this.Ni;
	}
	/**
	 * @return Retorna el valor de la propietat operacio
	 */
	public Operacio getOperacio() {
		return this.operacio;
	}
	/**
	 * @return Retorna el valor de la propietat resultat
	 */
	public Resultat getResultat() {
		return this.resultat;
	}
	/**
	 * @return Retorna el valor de la propietat usuariDesti
	 */
	public Usuari getUsuariDesti() {
		return this.usuariDesti;
	}
	/**
	 * @return Retorna el valor de la propietat usuariOrigen
	 */
	public Usuari getUsuariOrigen() {
		return this.usuariOrigen;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		return new HashCodeBuilder()
			.append(this.resultat)
			.append(this.descripcio)
			.append(this.operacio)
			.append(this.usuariOrigen)
			.append(this.usuariDesti)
			.append(this.Ni)
			.append(this.Ng)
			.toHashCode();
	}

	/**
	 * @param descripcio
	 *            Estableix el valor de la propietat descripcio
	 */
	public void setDescripcio(String descripcio) {
		this.descripcio = descripcio;
	}

	/**
	 * @param ng Estableix el valor de la propietat ng
	 */
	public void setNg(Integer ng) {
		this.Ng = ng;
	}
	/**
	 * @param ni Estableix el valor de la propietat ni
	 */
	public void setNi(Integer ni) {
		this.Ni = ni;
	}
	/**
	 * @param Estableix operacio com a valor de la propietat operacio
	 */
	public void setOperacio(Operacio operacio) {
		this.operacio = operacio;
	}
	/**
	 * @param resultat Estableix el valor de la propietat resultat
	 */
	public void setResultat(Resultat resultat) {
		this.resultat = resultat;
	}
	/**
	 * @param usuariDesti Estableix el valor de la propietat usuariDesti
	 */
	public void setUsuariDesti(Usuari usuariDesti) {
		this.usuariDesti = usuariDesti;
	}

	/**
	 * @param usuariOrigen Estableix el valor de la propietat usuariOrigen
	 */
	public void setUsuariOrigen(Usuari usuariOrigen) {
		this.usuariOrigen = usuariOrigen;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
			.append("resultat", this.resultat)
			.append("descripcio", this.descripcio)
			.append("operacio", this.operacio)
			.append("usuariOrigen", this.usuariOrigen)
			.append("usuariDesti", this.usuariDesti)
			.append("Ni", this.Ni)
			.append("Ng", this.Ng)
			.toString();
	}


}
